package com.demo.aspect;

import lombok.extern.slf4j.Slf4j;
import org.miniframework.aop.annotation.Aspect1;
import org.miniframework.aop.annotation.Order;
import org.miniframework.aop.aspect.DefaultAspect;
import org.miniframework.core.annotation.Controller;

import java.lang.reflect.Method;

/**
 * AOP 1.0 测试
 */
@Slf4j
@Aspect1(Controller.class)
@Order(2)
public class AdviceAspect3 extends DefaultAspect {

    private long startTime;

    /**
     * 事前拦截
     * @param targetClass 被代理的目标类
     * @param method      被代理的目标方法
     * @param args        被代理的目标方法对应的参数列表
     */
    @Override
    public void before(Class<?> targetClass, Method method, Object[] args) throws Throwable {
        startTime = System.currentTimeMillis();
        log.info("Aspect3 方法开始执行 before，执行的类[{}],执行的方法[{}],参数[{}]",targetClass.getName(),method.getName(),args);
    }

    /**
     * 事后拦截
     * @param targetClass 被代理的目标类
     * @param method      被代理的目标方法
     * @param args        被代理的目标方法对应的参数列表
     * @param returnValue 被代理的目标方法执行后的返回值
     */
    @Override
    public Object afterReturning(Class<?> targetClass, Method method, Object[] args, Object returnValue) throws Throwable {
        long endTime = System.currentTimeMillis() - startTime;
        log.info("Aspect3 方执行完毕 afterReturning，执行时间：[{}] 毫秒，执行的类[{}],执行的方法[{}],参数[{}],返回值[{}]",endTime,targetClass.getName(),method.getName(),args,returnValue);
        return returnValue;
    }
}
